home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / mutantmarine.s < prev    next >
Text File  |  1997-11-28  |  16KB  |  1,001 lines

  1. ItsAMutantMarine:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #128*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #64,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintopp
  60.  move.l ToUpperFloor(a1),d0
  61. .notintopp:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  move.w 12(a0),GraphicRoom(a0)
  66.  rts
  67.  
  68. .dyinganim:
  69.  dcb.w 6,18
  70.  dcb.w 10,17
  71.  dcb.w 10,16
  72.  
  73. .notdying: 
  74.  
  75.  move.w 12(a0),d2
  76.  move.l ZoneAdds,a5
  77.  move.l (a5,d2.w*4),d0
  78.  add.l LEVELDATA,d0
  79.  move.l d0,objroom
  80.  
  81.  jsr ViewpointToDraw
  82.  
  83.  asl.l #2,d0
  84.  add.w alframe+2,d0
  85.  add.l #$a0000,d0
  86.  
  87.  move.l d0,8(a0)
  88.  
  89.  move.w #0,DEFAULTMODE
  90.  move.w #1,RESPONSEMODE
  91.  move.w #0,RETREATMODE
  92.  move.w #1,FOLLOWUPMODE
  93.  
  94.  move.w #6,prowlspeed
  95.  move.w #8,responsespeed
  96.  move.w #8,retreatspeed
  97.  move.w #8,followupspeed
  98.  move.w #50,FOLLOWUPTIMER
  99.  move.w #15,REACTIONTIME
  100.  
  101.  jsr AIROUTINE
  102.  
  103. ; move.w #-20,d0
  104. ; move.w newx,d1
  105. ; move.w newz,d2
  106. ; move.w 12(a0),d3
  107. ; move.w Facing(a0),d4
  108. ; jsr BRIGHTENPOINTSANGLE
  109.  
  110.  rts
  111.  
  112.  
  113.  
  114. ribble:
  115.  
  116.  tst.b 17(a0)
  117.  beq.s .cantseeplayer
  118.  tst.w ThirdTimer(a0)
  119.  ble MutMarAttack
  120.  move.w TempFrames,d0
  121.  sub.w d0,ThirdTimer(a0)
  122.  bra .waitandsee
  123.  
  124. .cantseeplayer:
  125.  
  126.  jsr GetRand
  127.  lsr.w #4,d0
  128.  and.w #63,d0
  129.  add.w #20,d0
  130.  move.w d0,ThirdTimer(a0)
  131.  
  132. .waitandsee:
  133.  
  134.  move.w #25,FourthTimer(a0)
  135.  
  136.  move.w 12(a0),d2
  137.  move.l ZoneAdds,a5
  138.  move.l (a5,d2.w*4),d0
  139.  add.l LEVELDATA,d0
  140.  move.l d0,objroom
  141.  
  142.  jsr ViewpointToDraw
  143.  
  144.  asl.l #2,d0
  145.  add.w alframe+2,d0
  146.  add.l #$000a0000,d0
  147.  move.l d0,8(a0)
  148.  
  149.  move.w 4(a0),d0
  150.  sub.w #64,d0
  151.  ext.l d0
  152.  asl.l #7,d0
  153.  move.l d0,newy
  154.  move.l d0,oldy
  155.  
  156.  move.w 12(a0),FromZone
  157.  jsr CheckTeleport
  158.  tst.b OKTEL
  159.  beq.s .notel
  160.  move.l floortemp,d0
  161.  asr.l #7,d0
  162.  add.w d0,4(a0)
  163.  bra .nochangedir
  164. .notel:
  165.  
  166.  move.w maxspd(a0),d2
  167.  muls TempFrames,d2
  168.  move.w d2,speed
  169.  move.w Facing(a0),d0
  170.  move.b ObjInTop(a0),StoodInTop
  171.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  172.  jsr GoInDirection
  173.  move.w #%1000000000,wallflags
  174.  
  175.  move.l #%11111111110111100001,CollideFlags
  176.  jsr Collision
  177.  tst.b hitwall
  178.  beq.s .canmove
  179.  
  180.  move.w oldx,newx
  181.  move.w oldz,newz
  182.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  183.  bra .hitathing
  184.  
  185. .canmove:
  186.  
  187.  clr.b wallbounce
  188.  jsr MoveObject
  189.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  190.  move.b StoodInTop,ObjInTop(a0)
  191.  
  192. .hitathing:
  193.  
  194.  tst.b hitwall
  195.  beq.s .nochangedir
  196.  move.w #-1,ObjTimer(a0)
  197. .nochangedir
  198.  
  199.  move.l objroom,a2
  200.  move.w (a2),12(a0)
  201.  move.w newx,(a1)
  202.  move.w newz,4(a1)
  203.  
  204.  move.w (a2),d0
  205.  move.l #ZoneBrightTable,a5
  206.  move.l (a5,d0.w*4),d0
  207.  tst.b ObjInTop(a0)
  208.  bne.s .okbit
  209.  swap d0
  210. .okbit:
  211.  move.w d0,2(a0)
  212.  
  213.  move.l ToZoneFloor(a2),d0
  214.  tst.b ObjInTop(a0)
  215.  beq.s .notintop
  216.  move.l ToUpperFloor(a2),d0
  217. .notintop:
  218.  asr.l #7,d0
  219.  sub.w #64,d0
  220.  move.w d0,4(a0)
  221.  
  222.  moveq #0,d2
  223.  move.b damagetaken(a0),d2
  224.  beq .noscream
  225.  
  226.  sub.b d2,numlives(a0)
  227.  bgt .notdeadyet
  228.  
  229.  cmp.b #1,d2
  230.  ble .noexplode
  231.  
  232.  movem.l d0-d7/a0-a6,-(a7)
  233.  sub.l ObjectPoints,a1
  234.  add.l #ObjRotated,a1
  235.  move.l (a1),Noisex
  236.  move.w #400,Noisevol
  237.  move.w #14,Samplenum
  238.  move.b #1,chanpick
  239.  clr.b notifplaying
  240.  st backbeat
  241.  move.b 1(a0),IDNUM
  242.  jsr MakeSomeNoise
  243.  movem.l (a7)+,d0-d7/a0-a6
  244.  
  245.  movem.l d0-d7/a0-a6,-(a7)
  246.  move.w #0,d0
  247.  asr.w #2,d2
  248.  tst.w d2
  249.  bgt.s .ko
  250.  moveq #1,d2
  251. .ko:
  252.  move.w #31,d3
  253.  jsr ExplodeIntoBits
  254.  PROTMCHECK a0
  255.  movem.l (a7)+,d0-d7/a0-a6
  256.  
  257.  cmp.b #40,d2
  258.  blt .noexplode
  259.  
  260.  move.w #-1,12(a0)
  261.  move.w 12(a0),GraphicRoom(a0)
  262.  rts
  263.  
  264. .noexplode:
  265.  
  266.  movem.l d0-d7/a0-a6,-(a7)
  267.  sub.l ObjectPoints,a1
  268.  add.l #ObjRotated,a1
  269.  move.l (a1),Noisex
  270.  move.w #200,Noisevol
  271.  move.w screamsound,Samplenum
  272.  move.b #1,chanpick
  273.  clr.b notifplaying
  274.  st backbeat
  275.  move.b 1(a0),IDNUM
  276.  jsr MakeSomeNoise
  277.  movem.l (a7)+,d0-d7/a0-a6
  278.  
  279.  move.w #25,ThirdTimer(a0)
  280.  move.w 12(a0),GraphicRoom(a0)
  281.  rts
  282.  
  283. .notdeadyet:
  284.  clr.b damagetaken(a0)
  285.  movem.l d0-d7/a0-a6,-(a7)
  286.  sub.l ObjectPoints,a1
  287.  add.l #ObjRotated,a1
  288.  move.l (a1),Noisex
  289.  move.w #200,Noisevol
  290.  move.w screamsound,Samplenum
  291.  move.b #1,chanpick
  292.  clr.b notifplaying
  293.  move.b 1(a0),IDNUM
  294.  st backbeat
  295.  jsr MakeSomeNoise
  296.  movem.l (a7)+,d0-d7/a0-a6
  297.  
  298.  
  299. .noscream
  300.  
  301.  
  302.  move.w TempFrames,d0
  303.  sub.w d0,ObjTimer(a0)
  304.  bge.s .keepsamedir
  305.  
  306.  jsr GetRand
  307.  and.w #8190,d0
  308.  move.w d0,Facing(a0)
  309.  move.w #50,ObjTimer(a0)
  310.  
  311. .keepsamedir:
  312.  
  313.  move.w TempFrames,d0
  314.  sub.w d0,SecTimer(a0)
  315.  bge.s .nohiss
  316.  
  317.  jsr GetRand
  318.  lsr.w #6,d0
  319.  and.w #1,d0
  320.  add.w #17,d0
  321.  movem.l d0-d7/a0-a6,-(a7)
  322.  sub.l ObjectPoints,a1
  323.  add.l #ObjRotated,a1
  324.  move.l (a1),Noisex
  325.  move.w #100,Noisevol
  326.  move.w d0,Samplenum
  327.  move.b #1,chanpick
  328.  clr.b notifplaying
  329.  move.b 1(a0),IDNUM
  330.  st backbeat
  331.  jsr MakeSomeNoise
  332.  movem.l (a7)+,d0-d7/a0-a6
  333.  Jsr GetRand
  334.  lsr.w #6,d0
  335.  and.w #255,d0
  336.  add.w #300,d0
  337.  move.w d0,SecTimer(a0)
  338.  
  339. .nohiss:
  340.  
  341.  move.b ObjInTop(a0),ViewerTop
  342.  move.b PLR1_StoodInTop,TargetTop
  343.  move.l PLR1_Roompt,ToRoom
  344.  move.l objroom,FromRoom
  345.  move.w newx,Viewerx
  346.  move.w newz,Viewerz
  347.  move.w PLR1_xoff,Targetx
  348.  move.w PLR1_zoff,Targetz
  349.  move.l PLR1_yoff,d0
  350.  asr.l #7,d0
  351.  move.w d0,Targety
  352.  move.w 4(a0),Viewery
  353.  jsr CanItBeSeen
  354.  
  355.  clr.b 17(a0)
  356.  
  357.  tst.b CanSee
  358.  beq .carryonprowling
  359.  
  360.  move.b #1,17(a0)
  361.  
  362. .carryonprowling:
  363.  
  364.  move.b ObjInTop(a0),ViewerTop
  365.  move.b PLR2_StoodInTop,TargetTop
  366.  move.l PLR2_Roompt,ToRoom
  367.  move.l objroom,FromRoom
  368.  move.w newx,Viewerx
  369.  move.w newz,Viewerz
  370.  move.w PLR2_xoff,Targetx
  371.  move.w PLR2_zoff,Targetz
  372.  move.l PLR2_yoff,d0
  373.  asr.l #7,d0
  374.  move.w d0,Targety
  375.  move.w 4(a0),Viewery
  376.  jsr CanItBeSeen
  377.  
  378.  tst.b CanSee
  379.  beq .carryonprowling2
  380.  
  381.  or.b #2,17(a0)
  382.  
  383. .carryonprowling2:
  384.  
  385.  move.w 12(a0),GraphicRoom(a0)
  386.  rts
  387.  
  388. MutMarAttack:
  389.  
  390.  move.w 12(a0),d2
  391.  move.l ZoneAdds,a5
  392.  move.l (a5,d2.w*4),d0
  393.  add.l LEVELDATA,d0
  394.  move.l d0,objroom
  395.  jsr ViewpointToDraw
  396.  asl.l #2,d0
  397.  add.w alframe+2,d0
  398.  add.l #$000a0000,d0
  399.  move.l d0,8(a0)
  400.  
  401.  btst #0,17(a0)
  402.  beq MutMarAttackPLR2
  403.  btst #1,17(a0)
  404.  beq MutMarAttackPLR1
  405.  
  406.  move.l ObjectPoints,a1
  407.  move.w (a0),d0
  408.  move.w (a1,d0.w*8),d1
  409.  move.w 4(a1,d0.w*8),d2
  410.  
  411.  move.w PLR1_xoff,d3
  412.  move.w PLR1_zoff,d4
  413.  sub.w d1,d3
  414.  sub.w d2,d4
  415.  muls d3,d3
  416.  muls d4,d4
  417.  add.l d4,d3
  418.  move.w PLR2_xoff,d4
  419.  move.w PLR2_zoff,d5
  420.  sub.w d1,d4
  421.  sub.w d2,d5
  422.  muls d4,d4
  423.  muls d5,d5
  424.  add.l d5,d4
  425.  cmp.l d3,d4
  426.  ble MutMarAttackPLR2
  427.  
  428.  
  429. MutMarAttackPLR1:
  430.  
  431.  move.w TempFrames,d0
  432.  sub.w d0,FourthTimer(a0)
  433.  bgt.s .oktoshoot
  434.  move.w #50,ThirdTimer(a0)
  435. .oktoshoot:
  436.  
  437.  move.w 12(a0),d2
  438.  move.l ZoneAdds,a5
  439.  move.l (a5,d2.w*4),d0
  440.  add.l LEVELDATA,d0
  441.  move.l d0,objroom
  442.  
  443.  jsr ViewpointToDraw
  444.  
  445.  asl.l #2,d0
  446.  add.l #$a0000,d0
  447.  move.l d0,8(a0)
  448.  
  449.  move.w PLR1_xoff,newx
  450.  move.w PLR1_zoff,newz
  451.  move.w (a0),d1
  452.  move.l #ObjRotated,a6
  453.  move.l ObjectPoints,a1
  454.  lea (a1,d1.w*8),a1
  455.  lea (a6,d1.w*8),a6
  456.  move.w (a1),oldx
  457.  move.w 4(a1),oldz
  458.  move.w maxspd(a0),d2
  459.  muls.w TempFrames,d2
  460.  move.w d2,speed
  461.  move.w #80,Range
  462.  move.w 4(a0),d0
  463.  ext.l d0
  464.  asl.l #7,d0
  465.  sub.l #64*128,d0
  466.  move.l d0,newy
  467.  move.l d0,oldy
  468.  
  469.  move.b ObjInTop(a0),StoodInTop
  470.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  471.  clr.b canshove
  472.  clr.b GotThere
  473.  jsr HeadTowardsAng
  474.  move.w #%1000000000,wallflags
  475.  
  476.   
  477.  clr.b wallbounce
  478.  Jsr MoveObject
  479.  movem.l (a7)+,d0/a0/a6/a1/a3/a4/d7
  480.  move.b StoodInTop,ObjInTop(a0)
  481.  
  482.  move.w AngRet,Facing(a0)
  483.  
  484.  move.l objroom,a2
  485.  move.w (a2),12(a0)
  486.  move.w newx,(a1)
  487.  move.w newz,4(a1)
  488.  
  489.  move.w (a2),d0
  490.  move.l #ZoneBrightTable,a5
  491.  move.l (a5,d0.w*4),d0
  492.  tst.b ObjInTop(a0)
  493.  bne.s .okbit
  494.  swap d0
  495. .okbit:
  496.  move.w d0,2(a0)
  497.  
  498.  move.l ToZoneFloor(a2),d0
  499.  tst.b ObjInTop(a0)
  500.  beq.s .notintop
  501.  move.l ToUpperFloor(a2),d0
  502. .notintop:
  503.  asr.l #7,d0
  504.  sub.w #64,d0
  505.  move.w d0,4(a0)
  506.  
  507.  moveq #0,d2
  508.  move.b damagetaken(a0),d2
  509.  beq .noscream
  510.  
  511.  sub.b d2,numlives(a0)
  512.  bgt .notdeadyet
  513.  
  514.  cmp.b #1,d2
  515.  ble .noexplode
  516.  
  517.  movem.l d0-d7/a0-a6,-(a7)
  518.  sub.l ObjectPoints,a1
  519.  add.l #ObjRotated,a1
  520.  move.l (a1),Noisex
  521.  move.w #400,Noisevol
  522.  move.w #14,Samplenum
  523.  move.b #1,chanpick
  524.  clr.b notifplaying
  525.  st backbeat
  526.  move.b 1(a0),IDNUM
  527.  jsr MakeSomeNoise
  528.  movem.l (a7)+,d0-d7/a0-a6
  529.  
  530.  movem.l d0-d7/a0-a6,-(a7)
  531.  move.w #0,d0
  532.  asr.w #2,d2
  533.  tst.w d2
  534.  bgt.s .ko
  535.  moveq #1,d2
  536. .ko:
  537.  move.w #31,d3
  538.  jsr ExplodeIntoBits
  539.  movem.l (a7)+,d0-d7/a0-a6
  540.  
  541.  cmp.b #40,d2
  542.  blt .noexplode
  543.  
  544.  move.w #-1,12(a0)
  545.  move.w 12(a0),GraphicRoom(a0)
  546.  rts
  547.  
  548. .noexplode:
  549.  
  550.  movem.l d0-d7/a0-a6,-(a7)
  551.  sub.l ObjectPoints,a1
  552.  add.l #ObjRotated,a1
  553.  move.l (a1),Noisex
  554.  move.w #200,Noisevol
  555.  move.w screamsound,Samplenum
  556.  move.b #1,chanpick
  557.  clr.b notifplaying
  558.  st backbeat
  559.  move.b 1(a0),IDNUM
  560.  jsr MakeSomeNoise
  561.  movem.l (a7)+,d0-d7/a0-a6
  562.  
  563.  move.w #25,ThirdTimer(a0)
  564.  
  565.  move.w 12(a0),GraphicRoom(a0)
  566.  rts
  567.  
  568. .notdeadyet:
  569.  clr.b damagetaken(a0)
  570.  movem.l d0-d7/a0-a6,-(a7)
  571.  sub.l ObjectPoints,a1
  572.  add.l #ObjRotated,a1
  573.  move.l (a1),Noisex
  574.  move.w #200,Noisevol
  575.  move.w screamsound,Samplenum
  576.  move.b #1,chanpick
  577.  clr.b notifplaying
  578.  move.b 1(a0),IDNUM
  579.  st backbeat
  580.  jsr MakeSomeNoise
  581.  movem.l (a7)+,d0-d7/a0-a6
  582.  
  583. .noscream
  584.  
  585. ; tst.b canshootgun
  586. ; beq .cantshoot
  587.  cmp.w #20,FourthTimer(a0)
  588.  bgt .cantshoot
  589.  
  590.  jsr GetRand
  591.  and.w #255,d0
  592.  add.w #50,d0
  593.  move.w d0,ThirdTimer(a0)
  594.  move.l (a6),Noisex
  595.  move.w #200,Noisevol
  596.  move.w #3,Samplenum
  597.  move.b #1,chanpick
  598.  clr.b notifplaying
  599.  movem.l a5/a1/a0,-(a7)
  600.  move.b 1(a0),IDNUM
  601.  jsr MakeSomeNoise
  602.  movem.l (a7)+,a5/a1/a0
  603.  
  604.  move.w #-100,2(a0)
  605.  
  606.  movem.l a0/a1,-(a7)
  607.  jsr GetRand
  608.  
  609.  move.l #ObjRotated,a6
  610.  move.w (a0),d1
  611.  lea (a6,d1.w*8),a6
  612.  
  613.  and.w #$7fff,d0
  614.  move.w (a6),d1
  615.  muls d1,d1
  616.  move.w 2(a6),d2
  617.  muls d2,d2
  618.  add.l d2,d1
  619.  asr.l #6,d1
  620.  ext.l d0
  621.  asl.l #2,d0
  622.  cmp.l d1,d0
  623.  bgt.s .hitplr
  624.  jsr SHOOTPLAYER1
  625.  bra.s .missplr
  626. .hitplr: 
  627.  move.l PLR1_Obj,a1
  628.  add.b #4,damagetaken(a1)
  629. .missplr:
  630.  movem.l (a7)+,a0/a1
  631.  
  632. .cantshoot:
  633.  
  634.  
  635.  move.w TempFrames,d0
  636.  sub.w d0,SecTimer(a0)
  637.  bge.s .nohiss
  638.  
  639.  movem.l d0-d7/a0-a6,-(a7)
  640.  sub.l ObjectPoints,a1
  641.  add.l #ObjRotated,a1
  642.  move.l (a1),Noisex
  643.  move.w #100,Noisevol
  644.  move.w #16,Samplenum
  645.  move.b #1,chanpick
  646.  clr.b notifplaying
  647.  move.b 1(a0),IDNUM
  648.  st backbeat
  649.  jsr MakeSomeNoise
  650.  movem.l (a7)+,d0-d7/a0-a6
  651.  
  652.  Jsr GetRand
  653.  lsr.w #6,d0
  654.  and.w #255,d0
  655.  add.w #300,d0
  656.  move.w d0,SecTimer(a0)
  657.  
  658. .nohiss:
  659.  
  660.  move.b ObjInTop(a0),ViewerTop
  661.  move.b PLR1_StoodInTop,TargetTop
  662.  move.l PLR1_Roompt,ToRoom
  663.  move.l objroom,FromRoom
  664.  move.w newx,Viewerx
  665.  move.w newz,Viewerz
  666.  move.w PLR1_xoff,Targetx
  667.  move.w PLR1_zoff,Targetz
  668.  move.l PLR1_yoff,d0
  669.  asr.l #7,d0
  670.  move.w d0,Targety
  671.  move.w 4(a0),Viewery
  672.  jsr CanItBeSeen
  673.  
  674.  clr.b 17(a0)
  675.  tst.b CanSee
  676.  beq .carryonprowling
  677.  
  678.  move.b #1,17(a0)
  679.  
  680. .carryonprowling:
  681.  
  682.  cmp.b #'n',mors
  683.  beq.s .carryonprowling2
  684.  
  685.  
  686.  move.b ObjInTop(a0),ViewerTop
  687.  move.b PLR2_StoodInTop,TargetTop
  688.  move.l PLR2_Roompt,ToRoom
  689.  move.l objroom,FromRoom
  690.  move.w newx,Viewerx
  691.  move.w newz,Viewerz
  692.  move.w PLR2_xoff,Targetx
  693.  move.w PLR2_zoff,Targetz
  694.  move.l PLR2_yoff,d0
  695.  asr.l #7,d0
  696.  move.w d0,Targety
  697.  move.w 4(a0),Viewery
  698.  jsr CanItBeSeen
  699.  
  700.  tst.b CanSee
  701.  beq .carryonprowling2
  702.  
  703.  or.b #2,17(a0)
  704.  
  705. .carryonprowling2:
  706.  
  707.  
  708.  move.w 12(a0),GraphicRoom(a0)
  709.  rts
  710.  
  711. *************************************************
  712.  
  713. MutMarAttackPLR2:
  714.  
  715.   
  716.  move.w TempFrames,d0
  717.  sub.w d0,FourthTimer(a0)
  718.  bgt.s .oktoshoot
  719.  move.w #50,ThirdTimer(a0)
  720. .oktoshoot:
  721.  
  722.  move.w 12(a0),d2
  723.  move.l ZoneAdds,a5
  724.  move.l (a5,d2.w*4),d0
  725.  add.l LEVELDATA,d0
  726.  move.l d0,objroom
  727.  
  728.  jsr ViewpointToDraw
  729.  
  730.  asl.l #2,d0
  731.  add.l #$a0000,d0
  732.  move.l d0,8(a0)
  733.  
  734.  move.w PLR2_xoff,newx
  735.  move.w PLR2_zoff,newz
  736.  move.w (a0),d1
  737.  move.l #ObjRotated,a6
  738.  move.l ObjectPoints,a1
  739.  lea (a1,d1.w*8),a1
  740.  lea (a6,d1.w*8),a6
  741.  move.w (a1),oldx
  742.  move.w 4(a1),oldz
  743.  move.w maxspd(a0),d2
  744.  muls.w TempFrames,d2
  745.  move.w d2,speed
  746.  move.w #80,Range
  747.  move.w 4(a0),d0
  748.  ext.l d0
  749.  asl.l #7,d0
  750.  sub.l #64*128,d0
  751.  move.l d0,newy
  752.  move.l d0,oldy
  753.  
  754.  move.b ObjInTop(a0),StoodInTop
  755.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  756.  clr.b canshove
  757.  clr.b GotThere
  758.  jsr HeadTowardsAng
  759.  move.w #%1000000000,wallflags
  760.  
  761.   
  762.  clr.b wallbounce
  763.  Jsr MoveObject
  764.  movem.l (a7)+,d0/a0/a1/a3/a6/a4/d7
  765.  move.b StoodInTop,ObjInTop(a0)
  766.  
  767.  move.w AngRet,Facing(a0)
  768.  
  769.  move.l objroom,a2
  770.  move.w (a2),12(a0)
  771.  move.w newx,(a1)
  772.  move.w newz,4(a1)
  773.  
  774.  move.w (a2),d0
  775.  move.l #ZoneBrightTable,a5
  776.  move.l (a5,d0.w*4),d0
  777.  tst.b ObjInTop(a0)
  778.  bne.s .okbit
  779.  swap d0
  780. .okbit:
  781.  move.w d0,2(a0)
  782.  
  783.  move.l ToZoneFloor(a2),d0
  784.  tst.b ObjInTop(a0)
  785.  beq.s .notintop
  786.  move.l ToUpperFloor(a2),d0
  787. .notintop:
  788.  asr.l #7,d0
  789.  sub.w #64,d0
  790.  move.w d0,4(a0)
  791.  
  792.  moveq #0,d2
  793.  move.b damagetaken(a0),d2
  794.  beq .noscream
  795.  
  796.  sub.b d2,numlives(a0)
  797.  bgt .notdeadyet
  798.  
  799.  cmp.b #1,d2
  800.  ble.s .noexplode
  801.  
  802.  movem.l d0-d7/a0-a6,-(a7)
  803.  sub.l ObjectPoints,a1
  804.  add.l #ObjRotated,a1
  805.  move.l (a1),Noisex
  806.  move.w #400,Noisevol
  807.  move.w #14,Samplenum
  808.  move.b #1,chanpick
  809.  clr.b notifplaying
  810.  st backbeat
  811.  move.b 1(a0),IDNUM
  812.  jsr MakeSomeNoise
  813.  movem.l (a7)+,d0-d7/a0-a6
  814.  
  815.  movem.l d0-d7/a0-a6,-(a7)
  816.  move.w #0,d0
  817.  tst.w d2
  818.  bgt.s .ko
  819.  moveq #1,d2
  820. .ko:
  821.  move.w #31,d3
  822.  jsr ExplodeIntoBits
  823.  movem.l (a7)+,d0-d7/a0-a6
  824.  
  825.  cmp.b #10,d2
  826.  blt .noexplode
  827.  
  828.  move.w #-1,12(a0)
  829.  move.w 12(a0),GraphicRoom(a0)
  830.  rts
  831.  
  832. .noexplode:
  833.  
  834.  movem.l d0-d7/a0-a6,-(a7)
  835.  sub.l ObjectPoints,a1
  836.  add.l #ObjRotated,a1
  837.  move.l (a1),Noisex
  838.  move.w #200,Noisevol
  839.  move.w screamsound,Samplenum
  840.  move.b #1,chanpick
  841.  clr.b notifplaying
  842.  st backbeat
  843.  move.b 1(a0),IDNUM
  844.  jsr MakeSomeNoise
  845.  movem.l (a7)+,d0-d7/a0-a6
  846.  
  847.  move.w #25,ThirdTimer(a0)
  848.  
  849.  move.w 12(a0),GraphicRoom(a0)
  850.  rts
  851.  
  852. .notdeadyet:
  853.  clr.b damagetaken(a0)
  854.  movem.l d0-d7/a0-a6,-(a7)
  855.  sub.l ObjectPoints,a1
  856.  add.l #ObjRotated,a1
  857.  move.l (a1),Noisex
  858.  move.w #200,Noisevol
  859.  move.w screamsound,Samplenum
  860.  move.b #1,chanpick
  861.  clr.b notifplaying
  862.  move.b 1(a0),IDNUM
  863.  st backbeat
  864.  jsr MakeSomeNoise
  865.  movem.l (a7)+,d0-d7/a0-a6
  866.  
  867.  
  868.  
  869. .noscream
  870.  
  871. ; tst.b canshootgun
  872. ; beq .cantshoot
  873.  cmp.w #20,FourthTimer(a0)
  874.  bge .cantshoot
  875.  
  876.  jsr GetRand
  877.  and.w #255,d0
  878.  add.w #200,d0
  879.  move.w d0,ThirdTimer(a0)
  880.  
  881.  move.l (a6),Noisex
  882.  move.w #200,Noisevol
  883.  move.w #3,Samplenum
  884.  move.b #1,chanpick
  885.  clr.b notifplaying
  886.  movem.l a5/a1/a0,-(a7)
  887.  move.b 1(a0),IDNUM
  888.  jsr MakeSomeNoise
  889.  movem.l (a7)+,a5/a1/a0
  890.  
  891.  move.w #-100,2(a0)
  892.  
  893.  movem.l a0/a1,-(a7)
  894.  jsr GetRand
  895.  
  896.  move.l #ObjRotated,a6
  897.  move.w (a0),d1
  898.  lea (a6,d1.w*8),a6
  899.  
  900.  and.w #$7fff,d0
  901.  move.w (a6),d1
  902.  muls d1,d1
  903.  move.w 2(a6),d2
  904.  muls d2,d2
  905.  add.l d2,d1
  906.  asr.l #6,d1
  907.  ext.l d0
  908.  asl.l #2,d0
  909.  cmp.l d1,d0
  910.  bgt.s .hitplr
  911.  jsr SHOOTPLAYER2
  912.  bra.s .missplr
  913. .hitplr: 
  914.  move.l PLR2_Obj,a1
  915.  add.b #4,damagetaken(a1)
  916. .missplr:
  917.  movem.l (a7)+,a0/a1
  918.  
  919. .cantshoot:
  920.  
  921.  
  922.  move.w TempFrames,d0
  923.  sub.w d0,SecTimer(a0)
  924.  bge.s .nohiss
  925.  
  926.  movem.l d0-d7/a0-a6,-(a7)
  927.  sub.l ObjectPoints,a1
  928.  add.l #ObjRotated,a1
  929.  move.l (a1),Noisex
  930.  move.w #100,Noisevol
  931.  move.w #16,Samplenum
  932.  move.b #1,chanpick
  933.  clr.b notifplaying
  934.  move.b 1(a0),IDNUM
  935.  st backbeat
  936.  jsr MakeSomeNoise
  937.  movem.l (a7)+,d0-d7/a0-a6
  938.  
  939.  Jsr GetRand
  940.  lsr.w #6,d0
  941.  and.w #255,d0
  942.  add.w #300,d0
  943.  move.w d0,SecTimer(a0)
  944.  
  945. .nohiss:
  946.  
  947.  move.b ObjInTop(a0),ViewerTop
  948.  move.b PLR1_StoodInTop,TargetTop
  949.  move.l PLR1_Roompt,ToRoom
  950.  move.l objroom,FromRoom
  951.  move.w newx,Viewerx
  952.  move.w newz,Viewerz
  953.  move.w PLR1_xoff,Targetx
  954.  move.w PLR1_zoff,Targetz
  955.  move.l PLR1_yoff,d0
  956.  asr.l #7,d0
  957.  move.w d0,Targety
  958.  move.w 4(a0),Viewery
  959.  jsr CanItBeSeen
  960.  
  961.  clr.b 17(a0)
  962.  tst.b CanSee
  963.  beq .carryonprowling
  964.  
  965.  move.b #1,17(a0)
  966.  
  967. .carryonprowling:
  968.  
  969.  cmp.b #'n',mors
  970.  beq.s .carryonprowling2
  971.  
  972.  
  973.  move.b ObjInTop(a0),ViewerTop
  974.  move.b PLR2_StoodInTop,TargetTop
  975.  move.l PLR2_Roompt,ToRoom
  976.  move.l objroom,FromRoom
  977.  move.w newx,Viewerx
  978.  move.w newz,Viewerz
  979.  move.w PLR2_xoff,Targetx
  980.  move.w PLR2_zoff,Targetz
  981.  move.l PLR2_yoff,d0
  982.  asr.l #7,d0
  983.  move.w d0,Targety
  984.  move.w 4(a0),Viewery
  985.  jsr CanItBeSeen
  986.  
  987.  tst.b CanSee
  988.  beq .carryonprowling2
  989.  
  990.  or.b #2,17(a0)
  991.  
  992. .carryonprowling2:
  993.  
  994.  
  995.  
  996.  
  997.  move.w 12(a0),GraphicRoom(a0)
  998.  rts
  999.  
  1000.  
  1001.